const path = require('path')
const { getFileJsonData } = require('../utils/file_utils')
const WebSocket = require('ws')

const wss = new WebSocket.Server({
    port:9998
})

module.exports.listen = () => {
    // 1. 对客户端连接事件进行接听，client:代表的是客户端的连接socket对象
    wss.on('connection', client => {
        console.log('有客户端连接服务端成功了...')

        // 2. 对客户端的连接对象进行message事件的监听,
        //     msg: 由客户端发给服务端的数据
        client.on('message', async (msg) => {
            console.log('客户端发送数据给服务端了:' + msg)
            // 2.1 将msg装换为JavaScript对象
            let payload  = JSON.parse(msg)
            // 2.2 找出action
            const action = payload.action || ''


            // 3 当action为获取数据标识时
            if (action === 'getData') {
                // 3.1 获取当前请求数据路径
                let filePath = '../data/' + payload.chartName + '.json'
                filePath = path.join(__dirname, filePath)

                // 3.2 通过工具方法获取请求数据路径中的数据
                const result = await getFileJsonData(filePath)
                // 3.3 为发送给客户端的请求数据增加一个data的字段
                payload.data = result
                // 3.4 将发送给客户端的请求数据装换为JSON格式，并发送
                client.send(JSON.stringify(payload))
            }

            // 4. 当action不为获取数据标识时
            if (action !== 'getData') {
                //console.log(Buffer.from.readDoubleBE(msg))
                // 4.1 原封不动的将所接收到的数据转发给每一个处于连接状态的客户端
                //     wss.clients  为所有客户端的连接
                wss.clients.forEach(client => {
                    client.send(msg)
                })
            }


        })

    })
}
